package com.example.mysql.学习笔记.高级.事务.多版本并发控制;

public class 学习MVCC的复习_3 {
}
/**
 *3.1再谈隔离级别
 * 我们知道事务有4个隔离级别，可能存在三种并发问题:
 *
 * 读未提交
 * 读已提交   解决脏读
 * 可重复读    解决不可重复读    MySQL使用MVCC解决了幻读
 * 串行化     解决幻读
 *
 * 在MySQL中,默认的隔离级别是可重复读，可以解决脏读和不可重复读的问题，
 * 如果仅从定义的角度来看，它并不能解决幻读问题。
 * 如果我们想要解决幻读问题，就需要采用串行化的方式,也就是将隔离级别提升到最高，
 * 但这样一来就会大幅降低数据库的事务并发能力。
 *
 * MVCC可以不采用锁机制,而是通过乐观锁的方式来解决不可重复读和幻读问题!
 * 它可以在大多数情况下替代行级锁，降低系统的开销。
 *
 */
/**
 * 3.2隐藏字段、Undo Log版本链
 * 回顾一下undo日志的版本链，对于使用InnoDB存储引擎的表来说，
 * 它的聚簇索引记录中都包含两个必要的隐藏列。
 * ●trx_id:每次-个事务对某条聚簇索引记录进行改动时，都会把该事务的事务id赋值给trx_id隐藏列。
 * ●roll_pointer :每次对某条聚簇索引记录进行改动时，都会把旧的版本写入到undo日志中，
 *           然后这个隐藏列就相当于一个指针，可以通过它来找到该记录修改前的信息。
 *
 * insert undo只在事务回滚时起作用，当事务提交后，该类型的undo日志就没用了，
 * 它占用的Undo Log
 * Segment也会被系统回收(也就是该undo日志占用的Undo页面链表要么被重用，要么被释放)
 *
 */
